package cn.snowheart.singleton;

/**
 * 懒汉模式 - 第一版
 * 会因多线程的访问情况，造成多实例化
 *
 * @author liuwanxiang
 * @version 2019/07/02
 */
public class SingletonV2 {

    private static SingletonV2 singletonV2;

    private int value;

    private SingletonV2() {
        value = 0;
    }

    public int increase() {
        return value++;
    }

    public static SingletonV2 getInstance() {
        if (singletonV2 == null) {
            try {
                // 线程sleep一段时间，再进行初始化操作
                // 模拟实际过程中的一个实例加载所需要的时间
                long times = (long) (Math.random() * 1000);
                Thread.sleep(times);
            } catch (InterruptedException e) {
                e.printStackTrace();
            }
            singletonV2 = new SingletonV2();
        }
        return singletonV2;
    }

}
